package com.powernode.ssm.utils;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;

public class PropertiesUtils {

    /**
     * 从 properties 文件中读取指定 key 的值，并替换其中的占位符为实际值
     *
     * @param propertiesFileName properties 文件名（与程序在同一路径下）
     * @param key                properties 中的 key，对应的值包含占位符
     * @param placeholders       占位符与实际值的映射，例如：{"table": "users"}
     * @return 替换占位符后的字符串
     */
    public static String getReplacedValue(String propertiesFileName, String key, Map<String, String> placeholders,String propertyPath) {
        // 加载 properties 文件
        System.out.println("当前工作目录: " + System.getProperty("user.dir"));
        String property = System.getProperty("user.dir")+ File.separator;
        String path = propertyPath;//配置文件从工作目录开始后的路径
        String absolutePath = property+path;

        Properties props = new Properties();
        try (FileInputStream fis = new FileInputStream(absolutePath+propertiesFileName)) {
            props.load(fis);
        } catch (IOException e) {
            System.err.println("无法加载 properties 文件: " + propertiesFileName);
            e.printStackTrace();
            return null; // 如果加载失败，返回 null
        }

        // 获取包含占位符的原始字符串
        String template = props.getProperty(key);
        if (template == null) {
            System.err.println("在 properties 文件中未找到 key: " + key);
            return null; // 如果 key 不存在，返回 null
        }

        //将 \n 替换为实际的换行符
        //template = template.replace("\\n", "\n");

        // 替换占位符
        String result = template;
        for (Map.Entry<String, String> entry : placeholders.entrySet()) {
            String placeholder = "#{".concat(entry.getKey()).concat("}"); // 构造占位符，例如 #{table}
            result = result.replace(placeholder, entry.getValue()); // 替换为实际值
        }

        return result; // 返回替换后的字符串
    }

    public static void main(String[] args) {
        // 示例用法（Java 8 兼容方式初始化 Map）
        // 定义占位符与实际值的映射
        Map<String, String> placeholders = new HashMap<>();
        placeholders.put("table", "t_act");
        placeholders.put("order", "desc");

        String propertyPath = "ssm/src/main/java/com/powernode/ssm/utils/";
        // 调用封装的方法
        String replacedSql = getReplacedValue("mysql.properties", "sql.select", placeholders,propertyPath);

        // 输出结果
        if (replacedSql != null) {
            System.out.println("替换后的 SQL: " + replacedSql);
        } else {
            System.out.println("替换失败，请检查 properties 文件或参数！");
        }
    }
}
